# 导入必要的库
import streamlit as st
import pandas as pd
# 自定义渲染图表
import matplotlib.pyplot as plt

# 页面布局初始化
st.set_page_config(page_title="数据科学项目展示板", page_icon="📊", layout="wide")

# 使用st.title创建主标题
st.title("数据科学项目：客户流失预测分析")

# st.header用于一级子标题
st.header("项目概述")

st.write("""
在这个项目中，我们旨在构建一个预测模型，以预测公司的客户流失情况。通过分析历史客户数据，我们希望识别出导致客户流失的关键因素，并基于这些因素建立预测模型，帮助公司采取预防措施，减少客户流失率。
""")

# 使用st.subheader创建二级子标题
st.subheader("技术细节")

st.markdown("""
#### 数据预处理
- **缺失值处理**：利用均值、中位数或特定策略填充缺失值。
- **特征工程**：提取有用的特征，如客户活跃度指标、消费模式等。
- **特征选择**：基于相关性分析和模型评估结果选择重要特征。

#### 模型选择
- **算法尝试**：对比了逻辑回归、随机森林、XGBoost等多种模型。
- **交叉验证**：采用k折交叉验证评估模型性能。

#### 结果优化
- **超参数调优**：使用网格搜索或随机搜索优化模型参数。
- **模型评估**：使用准确率、召回率、F1分数等指标评估模型性能。
""")

# 显示代码片段
code_example = """
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.ensemble import RandomForestClassifier

# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 模型与参数网格定义
param_grid = {
    'n_estimators': [100, 200],
    'max_depth': [None, 10, 20],
    'min_samples_split': [2, 5, 10],
}

# 模型调优
rf = RandomForestClassifier(random_state=42)
grid_search = GridSearchCV(rf, param_grid, cv=5)
grid_search.fit(X_train, y_train)
"""
st.subheader("核心代码示例")  # 标题
st.code(code_example, language='python')  # language参数指定代码语言

# 显示数据框
data = {'Feature': ['Age', 'Subscription_Length', 'Total_Purchases', 'Complaints'],
        'Importance': [0.25, 0.30, 0.20, 0.15]}
df_features = pd.DataFrame(data)
st.subheader("特征重要性")   # 标题
# 显示数据框df_features.style.highlight_max(axis=0) = 高亮最大值,width= 宽度,height=高度
st.dataframe(df_features.style.highlight_max(axis=0), width=None, height=None)

# 纯文本显示
st.text("以上便是项目的核心内容概览，详细报告和代码请查看项目仓库。")

# 中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(10, 6))
plt.bar(df_features['Feature'], df_features['Importance'])
plt.title('特征重要性分布')
st.pyplot(plt)